#ifndef FITKABSGEOMODELCLINCHING_H
#define FITKABSGEOMODELCLINCHING_H

#include "FITKInterfaceGeometryAPI.h"
#include "FITKAbsGeoCommand.h"

namespace Interface
{
    /**
     * @brief 无铆连接--上模
     * @author liuyun
     * @date 2024-12-12
     */
    class FITKInterfaceGeometryAPI FITKAbsGeoModelClinchingPunch :
        public FITKAbsGeoCommand
    {
  //      FITKCLASS(Interface, FITKAbsGeoModelClinchingPunch);
    public:
        explicit FITKAbsGeoModelClinchingPunch() = default;
        virtual ~FITKAbsGeoModelClinchingPunch() = 0;
        void setPoint1(double* p1);
        void setOutRadius(double R);
        void setinnerRadius(double r);
        void setRadius(double radius);
        void setLength(double l);

        void getPoint1(double* p1);
        double getOutRadius();
        double getinnerRadius();
        double getRadius();
        double getLength();

        FITKGeoEnum::FITKGeometryComType getGeometryCommandType() override;

    protected:
        double _point1[3] = { 0,0,0 };
        double _OutRadius = 0;
        double _innerRadius = 0;
        double _Radius = 0;
        double _Length = 0;
    };


    /**
     * @brief 无铆连接--下模
     * @author liuyun
     * @date 2024-12-12
     */
    class FITKInterfaceGeometryAPI FITKAbsGeoModelClinchingDie :
        public FITKAbsGeoCommand
    {
  //      FITKCLASS(Interface, FITKAbsGeoModelClinchingDie);
    public:
        explicit FITKAbsGeoModelClinchingDie() = default;
        virtual ~FITKAbsGeoModelClinchingDie() = 0;
        void setPoint1(double* p1);
        void setOutRadius(double R);
        void setinnerRadius(double r);
        void setRadius(double radius);
        void setLength(double l);

        void getPoint1(double* p1);
        double getOutRadius();
        double getinnerRadius();
        double getRadius();
        double getLength();

        FITKGeoEnum::FITKGeometryComType getGeometryCommandType() override;

    protected:
        double _point1[3] = { 0,0,0 };
        double _OutRadius = 0;
        double _innerRadius = 0;
        double _Radius = 0;
        double _Length = 0;
    };


    /**
     * @brief 无铆连接--压边圈
     * @author liuyun
     * @date 2024-12-12
     */
    class FITKInterfaceGeometryAPI FITKAbsGeoModelClinchingBH :
        public FITKAbsGeoCommand
    {
  //      FITKCLASS(Interface, FITKAbsGeoModelClinchingBH);
    public:
        explicit FITKAbsGeoModelClinchingBH() = default;
        virtual ~FITKAbsGeoModelClinchingBH() = 0;
        void setPoint1(double* p1);
        void setOutRadius(double R);
        void setinnerRadius(double r);

        void getPoint1(double* p1);
        double getOutRadius();
        double getinnerRadius();

        FITKGeoEnum::FITKGeometryComType getGeometryCommandType() override;

    protected:
        double _point1[3] = { 0,0,0 };
        double _OutRadius = 0;
        double _innerRadius = 0;
    };


    /**
     * @brief 无铆连接--上板料
     * @author liuyun
     * @date 2024-12-12
     */
    class FITKInterfaceGeometryAPI FITKAbsGeoModelClinchingTopSheet :
        public FITKAbsGeoCommand
    {
  //      FITKCLASS(Interface, FITKAbsGeoModelClinchingTopSheet);
    public:
        explicit FITKAbsGeoModelClinchingTopSheet() = default;
        virtual ~FITKAbsGeoModelClinchingTopSheet() = 0;
        void setPoint1(double* p1);
        void setRadius(double radius);
        void setLength(double l);

        void getPoint1(double* p1);
        double getRadius();
        double getLength();

        FITKGeoEnum::FITKGeometryComType getGeometryCommandType() override;

    protected:
        double _point1[3] = { 0,0,0 };
        double _Radius = 0;
        double _Length = 0;
    };


    /**
     * @brief 无铆连接--下板料
     * @author liuyun
     * @date 2024-12-12
     */
    class FITKInterfaceGeometryAPI FITKAbsGeoModelClinchingBottomSheet :
        public FITKAbsGeoCommand
    {
  //      FITKCLASS(Interface, FITKAbsGeoModelClinchingBottomSheet);
    public:
        explicit FITKAbsGeoModelClinchingBottomSheet() = default;
        virtual ~FITKAbsGeoModelClinchingBottomSheet() = 0;
        void setPoint1(double* p1);
        void setRadius(double radius);
        void setLength(double l);

        void getPoint1(double* p1);
        double getRadius();
        double getLength();

        FITKGeoEnum::FITKGeometryComType getGeometryCommandType() override;

    protected:
        double _point1[3] = { 0,0,0 };
        double _Radius = 0;
        double _Length = 0;
    };

}

#endif // FITKABSGEOMODELCLINCHING_H
